package io.zhengsh.vvip.leetcode.twopointer;

import java.util.Arrays;

public class Q88 {

    class Solution {

        public void merge2(int[] num1, int m, int[] num2, int n) {
            int p1 = 0, p2 = 0;
            int cur;
            int[] sorted = new int[m + n];
            while (p1 < m || p2 < n) {
                if (p1 == m) {
                    cur = num2[p2++];
                } else if (p2 == n) {
                    cur = num1[p1++];
                } else if (num1[p1] > num2[p2]) {
                    cur = num1[p1++];
                } else {
                    cur = num2[p2++];
                }
                sorted[p1 + p2 - 1] = cur;
            }

            for (int i = 0; i < m + n; i++) {
                num1[i] = sorted[i];
            }
        }

        public void merge(int[] nums1, int m, int[] nums2, int n) {
            for (int i = 0; i < n; i++) {
                nums1[m + i] = nums2[i];
            }
            // 快排
            Arrays.sort(nums1);
        }

        public void merge1(int[] nums1, int m, int[] nums2, int n) {
            int p1 = m - 1;
            int p2 = n - 1;

            int tail = m + n - 1;
            int cur;
            while (p1 >= 0 || p2 >= 0) {
                // p1 边界
                if (p1 == -1) {
                    cur = nums2[p2--];
                }
                // p2 边界
                else if (p2 == -1) {
                    cur = nums2[p1--];
                }
                // 获取大的一个数
                else if (nums1[p1] > nums2[p2]) {
                    cur = nums1[p1--];
                } else {
                    cur = nums2[p2--];
                }
                // 放入最后
                nums1[tail--] = cur;
            }
        }
    }
}
